package com.java.oplog.config;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.PageUtil;
import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.List;

/**
 * 分页结果.
 */
@Data
@AllArgsConstructor
public class PageResult<T> {
    /**
     * 默认分页彩虹展示数量
     */
    public static final int RAINBOW_NUM = 5;

    /**
     * 第几页
     */
    private Integer pageIndex;
    /**
     * 每页条数
     */
    private Integer pageSize;
    /**
     * 总页数
     */
    private Integer totalPage = 0;
    /**
     * 总记录数
     */
    private Integer totalRows = 0;
    /**
     * 数据
     */
    private List<T> rows;


    /**
     * 分页彩虹
     */
    private int[] rainbow;

    public PageResult() {
    }

    /**
     * 分页数据
     *
     * @param rows      数据
     * @param total     总条数
     * @param pageIndex 当前页数
     * @param pageSize  每页条数
     */
    public PageResult(List<T> rows, Integer total, Integer pageIndex, Integer pageSize) {
        this.setRows(rows);
        this.setTotalRows(Convert.toInt(total));
        this.setPageIndex(Convert.toInt(pageIndex));
        this.setPageSize(Convert.toInt(pageSize));
        this.setTotalPage(PageUtil.totalPage(Convert.toInt(total), Convert.toInt(pageSize)));
        this.setRainbow(PageUtil.rainbow(Convert.toInt(pageIndex), Convert.toInt(this.getTotalPage()), RAINBOW_NUM));
    }

    public PageResult(List<T> rows, Long total, Long pageIndex, Long pageSize) {
        this.setRows(rows);
        this.setTotalRows(Convert.toInt(total));
        this.setPageIndex(Convert.toInt(pageIndex));
        this.setPageSize(Convert.toInt(pageSize));
        this.setTotalPage(PageUtil.totalPage(Convert.toInt(total), Convert.toInt(pageSize)));
        this.setRainbow(PageUtil.rainbow(Convert.toInt(pageIndex), Convert.toInt(this.getTotalPage()), RAINBOW_NUM));
    }

}
